#ifndef ACEMESH_COMPOSITE_TASK_H
#define ACEMESH_COMPOSITE_TASK_H

#include "ci_task.h"
#include "task_dag_graph.h"
#include "affinity_id_generator_range.h"

typedef struct aceMesh_composite_task {
    struct ci_task ci_task_base;
    int nested_width;
    int nested_begin_index;
#ifndef TEMP_NESTED
    AceMesh_runtime::task_dag_graph graph;
#endif
} aceMesh_composite_task;

void aceMesh_composite_task_constructor(aceMesh_composite_task *self, TASK_FUNCPTR funcptr);
void aceMesh_composite_task_destructor(aceMesh_composite_task *self);
void define_with_taskptr(ci_task *self, void *a_args, unsigned int args_sizeargs,
                         void *taskptr);
void set_sub_affinity_id(AceMesh_runtime::affinity_id_generator_range *affinity_gen, int startid, int mapsize);

#endif
